/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package starfox.personagens;

import java.util.ArrayList;
import java.util.Iterator;
import org.newdawn.slick.Animation;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;
import org.newdawn.slick.geom.Vector2f;
import util.CaixaColisao;
import util.StopWatch;

/**
 *
 * @author Lucas
 */

//Esta classe não estende "Inimigo", pois o método de update utiliza outros parâmetros.
public class InimigoSet3 extends Inimigo {
    SpriteSheet sprites = null;
    Animation spriteanim = null;
    //Vector2f pos = new Vector2f();
    TiroInimigo3 tiro;
    ArrayList<TiroInimigo3> tiros = null;
    //StopWatch controleTiros = null;
    //Tempo em que os inimigos devem ficar atirando
    StopWatch tempo = null;
    //Verificar se os inimigos terminaram de atirar para saírem da tela
    boolean done = false;
    //CaixaColisao box = null;

    //Este vetor será usado para pegar a posição da arwing no jogo e atirar em sua direção
    Vector2f arwPos = new Vector2f();

    public InimigoSet3(float x) throws SlickException {
        sprites = new SpriteSheet(new Image("imagens/sprites/inimigo3.png"), 57, 50);
        spriteanim = new Animation(sprites, 50);
        spriteanim.start();
        pos.x = x;
        pos.y = -20-spriteanim.getHeight();
        tiros = new ArrayList<TiroInimigo3>();
        controleTiros = new StopWatch();
        tempo = new StopWatch();
        box = new CaixaColisao(pos.x+17, pos.y, 23, spriteanim.getHeight());
    }

//    public Vector2f getPos(){
//        return pos;
//    }
//
//    public CaixaColisao getCaixaColisao(){
//        return box;
//    }
//
    @Override
    public void render(){
        spriteanim.draw(pos.x, pos.y);
        for(TiroInimigo3 t : tiros)
                t.render();
    }

    public ArrayList<TiroInimigo3> getTiros(){
        return tiros;
    }

    //Aqui, o inimigo desce à tela, fica um tempo atirando e depois vai embora, saindo pela direita.
    @Override
    public void update(int delta, Arwing arw) throws SlickException{
        if(!done){
            //Descer os inimigos até certa posição
            if(pos.y < 50){
                pos.y += 0.3f*delta;
                //Atualizar a posição da caixa de colisão
                box.update(pos.x+23, pos.y);
            }

            if(pos.y > 0 && !controleTiros.isRunning()) controleTiros.start();
            if(pos.y > 0 && !tempo.isRunning()) tempo.start();

            //Pegar a posição da Arwing
            arwPos.x = arw.getPos().x + arw.getWidth()/2;
            arwPos.y = arw.getPos().y + arw.getHeight()/2;

            //Atirar de acordo com a posição da Arwing
            if(controleTiros.getElapsedTime() >= 800){
                    tiro = new TiroInimigo3(pos.x+spriteanim.getWidth()/2, pos.y+spriteanim.getHeight(), arwPos);
                    tiros.add(tiro);
                    controleTiros.reset();
            }
            //Após 10 segundos, parar de atirar e sair da tela
            if(tempo.getElapsedTimeSecs() > 10) done = true;
        }
        else{
            if(tempo.isRunning()) tempo.stop();
            if(controleTiros.isRunning()) controleTiros.stop();
            pos.x += 0.3f*delta;
            //Atualizar a posição da caixa de colisão
            box.update(pos.x+23, pos.y);
        }
        //Mover os tiros, removendo-os da ArrayList caso saiam da tela
        for(Iterator<TiroInimigo3> it = tiros.iterator(); it.hasNext();) {
                tiro = it.next();
                tiro.update(delta);
                if(tiro.getPos().y > 600 || tiro.getPos().y < 0-tiro.getHeight() || tiro.getPos().x < 0-tiro.getWidth() || tiro.getPos().x > 800)
                    it.remove();
        }
    }

    @Override
    public void update(int delta) throws SlickException {}
}